<html manifest=node.manifest>

<head>
  <meta charset="utf-8">
  <title></title>
  <link rel="shortcut icon" type="image/ico" href="../../files/mixly.ico">
  <script type="text/javascript" src="../common/environment.js"></script>
  <script type="text/javascript" src="../common/jquery-1.11.3.min.js"></script>
  <script type="text/javascript" src="config.js"></script>
  <script type="text/javascript" src="../common/modules/board-config.js"></script>
  <script type="text/javascript" src="../common/modules/lazyload.js"></script>
  <script type="text/javascript" src="../common/modules/load-remove-script.js"></script>
  <script type="text/javascript" src="../common/modules/load-remove-css.js"></script>

  <script type="text/javascript" src="../common/core/blockly_compressed.js"></script>
  <script type="text/javascript" src="../common/core/base.js"></script>
  <script type="text/javascript" src="../common/core/python_compressed.js"></script>
  <script type="text/javascript" src="../micropython_esp32/others/variables.js"></script>
  <script type="text/javascript" src="../common/core/procedures.js"></script>

  <script type="text/javascript" src="../micropython_esp32/others/names.js"></script>
  <script src="generators/python.js"></script>
  <script type="text/javascript" src="libraries/company_pin.js"></script>

  <script type="text/javascript" src="../common/js/drag.js"></script>
  <script type="text/javascript" src="../common/js/code.js"></script>
  <script type="text/javascript" src="../common/js/Blob.js"></script>
  <script type="text/javascript" src="../common/spin.js"></script>
  <script type="text/javascript" src="../common/js/FileSaver.min.js"></script>
  <script type="text/javascript" src="../common/js/blockly_helper.js"></script>

  <script type="text/javascript" src="../common/modules/serial-highcharts.js"></script>
  <script type="text/javascript" src="../common/modules/title.js"></script>
  <script type="text/javascript" src="../common/modules/mixlyClient/burn-upload.js"></script>
  <!---profiles-->
  <script id="myblock-update" type="text/javascript" src="libraries/myblock.js"></script>
  <script type="text/javascript" src="../python/blocks/variables.js"></script>
  <script type="text/javascript" src="../python/generators/variables.js"></script>

  <script src="blocks/esp32_profile.js"></script>
  <!-- blocks file -->
  <script src="blocks/pins.js"></script>
  <script src="blocks/inout.js"></script>
  <script src="blocks/system.js"></script>
  <script src="blocks/serial.js"></script>
  <script src="blocks/communicate.js"></script>
  <script src="blocks/iot.js"></script>
  <script src="blocks/sensor.js"></script>
  <script src="blocks/network.js"></script>
  <script src="blocks/storage.js"></script>
  <script src="blocks/actuator.js"></script>
  <script src="blocks/display.js"></script>
  <script src="blocks/factory.js"></script>
  <script src="blocks/blynk.js"></script>
  <script src="../python/blocks/control.js"></script>
  <script src="../python/blocks/math.js"></script>
  <script src="../python/blocks/text.js"></script>
  <script src="../python/blocks/lists.js"></script>
  <script src="../python/blocks/dicts.js"></script>
  <script src="../python/blocks/logic.js"></script>
  <script src="../python/blocks/procedures.js"></script>
  <script src="../python/blocks/tuple.js"></script>
  <script src="../python/blocks/set.js"></script>
  <script src="../python/blocks/html.js"></script>
  <!-- generator file -->
  <script src="../python/generators/control.js"></script>
  <script src="../python/generators/math.js"></script>
  <script src="../python/generators/text.js"></script>
  <script src="../python/generators/lists.js"></script>
  <script src="../python/generators/dicts.js"></script>
  <script src="../python/generators/logic.js"></script>
  <script src="../python/generators/procedures.js"></script>
  <script src="../python/generators/set.js"></script>
  <script src="../python/generators/tuple.js"></script>
  <script src="../python/generators/html.js"></script>
  <script src="generators/pins.js"></script>
  <script src="generators/inout.js"></script>
  <script src="generators/system.js"></script>
  <script src="generators/serial.js"></script>
  <script src="generators/iot.js"></script>
  <script src="generators/communicate.js"></script>
  <script src="generators/sensor.js"></script>
  <script src="generators/storage.js"></script>
  <script src="generators/actuator.js"></script>
  <script src="generators/display.js"></script>
  <script src="generators/network.js"></script>
  <script src="generators/factory.js"></script>
  <script src="generators/blynk.js"></script>
  <!-- ace file -->
  <script src="../common/js/lib/ace/ace.js" type="application/javascript"></script>
  <script src="../common/js/lib/ace/ext-language_tools.js" type="application/javascript"></script>
  <script src="../python/blocks/utility.js"></script>
  <script src="../python/generators/utility.js"></script>
  <!-- converters file -->
  <script src="../common/js/py2block_editor.js" type="application/javascript"></script>
  <script src="converters/py2block_config.js" type="application/javascript"></script>
  <script src="converters/inout.js" type="application/javascript"></script>
  <script src="converters/serial.js" type="application/javascript"></script>
  <script src="converters/sensor.js" type="application/javascript"></script>
  <script src="converters/communicate.js" type="application/javascript"></script>
  <script src="converters/display.js" type="application/javascript"></script>
  <script src="converters/actuator.js" type="application/javascript"></script>
  <script src="converters/storage.js" type="application/javascript"></script>
  <script src="converters/network.js" type="application/javascript"></script>
  <script src="../python/converters/control.js" type="application/javascript"></script>
  <script src="../python/converters/math.js" type="application/javascript"></script>
  <script src="../python/converters/logic.js" type="application/javascript"></script>
  <script src="../python/converters/text.js" type="application/javascript"></script>
  <script src="../python/converters/lists.js" type="application/javascript"></script>
  <script src="../python/converters/tuple.js" type="application/javascript"></script>
  <script src="../python/converters/dicts.js" type="application/javascript"></script>
  <script src="../python/converters/set.js" type="application/javascript"></script>
  <script src="../python_mixpy/converters/system.js" type="application/javascript"></script>
  <script src="../common/js/python_to_blockly.js" type="application/javascript"></script>
  <script src="../common/js/skulpt/dist/skulpt.min.js" type="application/javascript"></script>
  <script src="../common/js/skulpt/dist/skulpt-stdlib.js" type="application/javascript"></script>
  <script src="../common/layui/layui.js"></script>
  <link rel="stylesheet" type="text/css" href="../common/layui/css/layui.css" />
  <link rel="stylesheet" type="text/css" href="css/color_esp32_s2.css" />
  <link rel="stylesheet" type="text/css" href="../common/css/ACEfont.css" />
  <link rel="stylesheet" type="text/css" href="../common/css/fontello.css" />
  <link rel="stylesheet" type="text/css" href="../common/css/library.css" />
  <link rel="stylesheet" type="text/css" href="../common/css/nav.css" />
  <script type="text/javascript" src="../common/dap.umd.js"></script>
  <!-- upload -->
  <script src="../common/py-init.js"></script>
  <script src="../common/interface-init.js"></script>
</head>

<body onload="init()">
  <xml id="toolbox" style="display: none">
    <category name="" id="catInOut" colour="20">
      <block type="inout_highlow"></block>
      <block type="inout_digital_init">
        <value name="PIN">
          <shadow type="pins_digital_pin">
          </shadow>
        </value>
      </block>
      <block type="inout_digitalinout_mode">
        <value name="PIN">
          <shadow type="pins_digital">
          </shadow>
        </value>
      </block>
      <block type="inout_digital_write">
        <value name="PIN">
          <shadow type="pins_digital"></shadow>
        </value>
        <value name="STAT">
          <shadow type="inout_highlow">
          </shadow>
        </value>
      </block>
      <block type="inout_digital_read">
        <value name="PIN">
          <shadow type="pins_digital"></shadow>
        </value>
      </block>
      <block type="inout_pwm_analog_write_init">
        <value name="PIN">
          <shadow type="pins_pwm_pin"></shadow>
        </value>
      </block>
      <block type="inout_pwm_analog_write">
        <value name="PIN">
          <shadow type="pins_pwm"></shadow>
        </value>
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="inout_pwm_analog_write_set_freq">
        <value name="PIN">
          <shadow type="pins_pwm"></shadow>
        </value>
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">2000</field>
          </shadow>
        </value>
      </block>
      <block type="inout_analog_read_init">
        <value name="PIN">
          <shadow type="pins_analog_pin"></shadow>
        </value>
      </block>
      <block type="inout_analog_atten">
        <value name="PIN">
          <shadow type="pins_analog"></shadow>
        </value>
      </block>
      <block type="inout_analog_read">
        <value name="PIN">
          <shadow type="pins_analog"></shadow>
        </value>
      </block>
      <block type="inout_pin_pressed_init">
        <value name="PIN">
          <shadow type="pins_touch_pin">
          </shadow>
        </value>
      </block>
      <block type="inout_pin_pressed">
        <value name="pin">
          <shadow type="pins_touch">
          </shadow>
        </value>
      </block>
    </category>
    <category id="catControl" colour="120">
      <block type="controls_main"></block>
      <block type="controls_whileUntil">
        <value name="BOOL">
          <shadow type="logic_boolean">
          </shadow>
        </value>
      </block>
      <block type="time_sleep">
        <value name="DELAY_TIME">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="controls_if"></block>
      <block type="controls_forEach">
        <value name="LIST">
          <shadow type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </shadow>
          <block type="controls_range">
            <value name="FROM">
              <shadow type="math_number">
                <field name="NUM">0</field>
              </shadow>
            </value>
            <value name="TO">
              <shadow type="math_number">
                <field name="NUM">5</field>
              </shadow>
            </value>
            <value name="STEP">
              <shadow type="math_number">
                <field name="NUM">1</field>
              </shadow>
            </value>
          </block>
        </value>
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i</field>
          </shadow>
        </value>
      </block>
      <block type="do_while">
      </block>
      <block type="controls_pass"></block>
      <block type="controls_flow_statements"></block>
      <block type="controls_try_finally"></block>
      <block type="controls_millis"></block>
      <block type="time_localtime"></block>
      <block type="time_ntptime"></block>
    </category>
    <category id="catMath" colour="230">
      <block type="math_number"></block>
      <block type="math_constant"></block>
      <block type="math_trig">
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">90</field>
          </shadow>
        </value>
      </block>
      <block type="text_to_number">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
      <block type="math_dec">
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">15</field>
          </shadow>
        </value>
      </block>
      <block type="math_arithmetic">
        <value name="A">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="math_bit">
        <value name="A">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="math_selfcalcu">
        <value name="A">
          <shadow type="variables_get">
            <field name="VAR">a</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="math_to_int">
        <value name="A">
          <shadow type="math_number">
            <field name="NUM">0.998</field>
          </shadow>
        </value>
      </block>
      <block type="math_max_min">
        <value name="A">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="math_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="math_round">
        <value name="VALUE">
          <shadow type="math_number">
            <field name="NUM">4.8</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="math_random_seed">
        <value name="NUM">
          <block type="text_to_number">
            <field name="TOWHAT">int</field>
            <value name="VAR">
              <block type="math_arithmetic">
                <field name="OP">MULTIPLY</field>
                <value name="A">
                  <shadow type="math_number">
                    <field name="NUM">1000</field>
                  </shadow>
                </value>
                <value name="B">
                  <block type="controls_millis"></block>
                </value>
              </block>
            </value>
          </block>
        </value>
      </block>
      <block type="math_random">
        <value name="FROM">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="TO">
          <shadow type="math_number">
            <field name="NUM">100</field>
          </shadow>
        </value>
      </block>
      <block type="math_number_base_conversion">
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">1010</field>
          </shadow>
      </block>
      <block type="math_constrain">
        <value name="VALUE">
          <shadow type="math_number">
            <field name="NUM">1000</field>
          </shadow>
        </value>
        <value name="LOW">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="HIGH">
          <shadow type="math_number">
            <field name="NUM">100</field>
          </shadow>
        </value>
      </block>
      <block type="math_map">
        <value name="NUM">
          <shadow type="math_number">
            <field name="NUM">50</field>
          </shadow>
        </value>
        <value name="fromLow">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="fromHigh">
          <shadow type="math_number">
            <field name="NUM">100</field>
          </shadow>
        </value>
        <value name="toLow">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="toHigh">
          <shadow type="math_number">
            <field name="NUM">1000</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catLogic" colour="210">
      <block type="logic_compare"></block>
      <block type="logic_compare_continous">
        <value name="A">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
        <value name="C">
          <shadow type="math_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="logic_operation"></block>
      <block type="logic_negate"></block>
      <block type="logic_boolean"></block>
      <block type="logic_null"></block>
      <block type="logic_true_or_false"></block>
      <block type="logic_is_in">
        <value name="A">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </shadow>
        </value>
      </block>
      <block type="logic_is">
        <value name="A">
          <shadow type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </shadow>
        </value>
      </block>
      <block type="logic_tobool">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catText" colour="160">
      <block type="text">
        <field name="TEXT">Mixly</field>
      </block>
      <block type="text_textarea">
      </block>
      <block type="text_join">
        <value name="A">
          <shadow type="text">
            <field name="TEXT">Hello</field>
          </shadow>
        </value>
        <value name="B">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>

      <block type="ascii_to_char">
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">65</field>
          </shadow>
        </value>
      </block>
      <block type="char_to_ascii">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">a</field>
          </shadow>
        </value>
      </block>
      <block type="number_to_text">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
      <block type="text_length">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="text_equals_starts_ends">
        <value name="STR1">
          <shadow type="text">
            <field name="TEXT"></field>
          </shadow>
        </value>
        <value name="STR2">
          <shadow type="text">
            <field name="TEXT"></field>
          </shadow>
        </value>
      </block>
      <block type="text_char_at">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
        <value name="AT">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="text_substring">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
        <value name="AT1">
          <shadow type="math_indexer_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="AT2">
          <shadow type="math_indexer_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="text_random_char">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="text_encode">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="text_capital">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Hello,mixly</field>
          </shadow>
        </value>
      </block>
      <block type="text_center">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Hello,mixly</field>
          </shadow>
        </value>
        <value name="WID">
          <shadow type="math_number">
            <field name="NUM">50</field>
          </shadow>
        </value>
        <value name="Symbol">
          <shadow type="text">
            <field name="TEXT">*</field>
          </shadow>
        </value>
      </block>
      <block type="text_find">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Hello,mixly</field>
          </shadow>
        </value>
        <value name="STR">
          <shadow type="text">
            <field name="TEXT">l</field>
          </shadow>
        </value>
      </block>
      <block type="text_join_seq">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">--</field>
          </shadow>
        </value>
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <block type="text_replace">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Hello,mixly</field>
          </shadow>
        </value>
        <value name="STR1">
          <shadow type="text">
            <field name="TEXT">mixly</field>
          </shadow>
        </value>
        <value name="STR2">
          <shadow type="text">
            <field name="TEXT">mixpy</field>
          </shadow>
        </value>
      </block>
      <block type="text_split">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">I love mixly！</field>
          </shadow>
        </value>
        <value name="VAL">
          <shadow type="text">
            <field name="TEXT"> </field>
          </shadow>
        </value>
      </block>
      <block type="text_strip">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT"> I love mixly </field>
          </shadow>
        </value>
      </block>
      <block type="text_format_noreturn">
        <mutation items="1"></mutation>
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Random No. is {}</field>
          </shadow>
        </value>
        <value name="ADD0">
          <block type="math_random">
            <field name="TYPE">int</field>
            <value name="FROM">
              <shadow type="math_number">
                <field name="NUM">1</field>
              </shadow>
            </value>
            <value name="TO">
              <shadow type="math_number">
                <field name="NUM">100</field>
              </shadow>
            </value>
          </block>
        </value>
      </block>
      <block type="text_eval">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">input('1+2*3')</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catMicropyLists" colour="260">
      <block type="lists_create_with"></block>
      <block type="variables_set">
        <field name="VAR">mylist</field>
        <value name="VALUE">
          <block type="list_many_input">
            <field name="CONTENT">1,2,3,4,5</field>
          </block>
        </value>
      </block>
      <!--<block type="lists_create_with_text"></block>  -->
      <block type="lists_get_index">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="AT">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_get_sublist">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="AT1">
          <shadow type="math_indexer_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="AT2">
          <shadow type="math_indexer_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="lists_get_random_item">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <block type="lists_get_random_sublist">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="list_trig">
        <value name="data">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <block type="lists_find">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_set_index">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="AT">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="TO">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_insert_value">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="AT">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="VALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_append_extend">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="DATA">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_remove_at">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="DATA">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_pop">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
        <value name="VALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="lists_sort">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <block type="lists_reverse">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <block type="lists_clear">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>
      <!--<block type="lists_change_to">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">mylist</field>
          </shadow>
        </value>
      </block>-->
      <block type="list_tolist">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
      <block type="lists_zip">
        <mutation items="2"></mutation>
        <value name="ADD0">
          <block type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </block>
        </value>
        <value name="ADD1">
          <block type="list_many_input">
            <field name="CONTENT">0,1,2,3</field>
          </block>
        </value>
      </block>
    </category>
    <category id="catTuple" colour="195">
      <block type="tuple_create_with"></block>
      <block type="variables_set">
        <field name="VAR">mytup</field>
        <value name="VALUE">
          <block type="tuple_create_with_text_return">
            <field name="TEXT">1,2,3,4,5</field>
          </block>
        </value>
      </block>
      <!--<block type="tuple_create_with_text2"></block>-->
      <block type="tuple_getIndex">
        <value name="TUP">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
        <value name="AT">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_get_sublist">
        <value name="LIST">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
        <value name="AT1">
          <shadow type="math_indexer_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="AT2">
          <shadow type="math_indexer_number">
            <field name="NUM">2</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_get_random_item">
        <value name="TUP">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_length">
        <value name="TUP">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_max">
        <value name="TUP">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_del">
        <value name="TUP">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
      </block>
      <block type="tuple_join">
        <value name="TUP1">
          <shadow type="variables_get">
            <field name="VAR">mytup1</field>
          </shadow>
        </value>
        <value name="TUP2">
          <shadow type="variables_get">
            <field name="VAR">mytup2</field>
          </shadow>
        </value>
      </block>
      <!--<block type="tuple_change_to">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">mytup</field>
          </shadow>
        </value>
      </block>-->
      <block type="tuple_totuple">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catDicts" colour="345">
      <block type="dicts_create_with"></block>
      <block type="dicts_keys">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_get">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_get_default">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_add_or_change">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_delete">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_pop">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_setdefault">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
        <value name="KEY">
          <shadow type="text">
            <field name="TEXT">key</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_clear">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>
      <!--<block type="dicts_items">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>-->
      <block type="dicts_values">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_length">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_deldict">
        <value name="DICT">
          <shadow type="variables_get">
            <field name="VAR">mydict</field>
          </shadow>
        </value>
      </block>
      <block type="dicts_todict">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catSet" colour="100">
      <block type="set_create_with"></block>
      <block type="variables_set">
        <field name="VAR">s1</field>
        <value name="VALUE">
          <block type="set_create_with_text_return">
            <field name="TEXT">1,2,3,4,5</field>
          </block>
        </value>
      </block>
      <block type="set_length">
        <value name="SET">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
      </block>
      <block type="set_pop">
        <value name="SET">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
      </block>
      <block type="set_operate">
        <value name="SET1">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
        <value name="SET2">
          <shadow type="variables_get">
            <field name="VAR">s2</field>
          </shadow>
        </value>
      </block>
      <block type="set_operate_update">
        <value name="SET1">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
        <value name="SET2">
          <shadow type="variables_get">
            <field name="VAR">s2</field>
          </shadow>
        </value>
      </block>
      <block type="set_add_discard">
        <value name="SET">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="set_update">
        <value name="SET">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="set_sub">
        <value name="SET1">
          <shadow type="variables_get">
            <field name="VAR">s1</field>
          </shadow>
        </value>
        <value name="SET2">
          <shadow type="variables_get">
            <field name="VAR">s2</field>
          </shadow>
        </value>
      </block>
      <block type="set_toset">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">x</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catVar" colour="330" custom="VARIABLE">
    </category>
    <category id="catFun" custom="PROCEDURE" colour="290"></category>
    <category id="catSerialPort" colour="65">
      <block type="system_print">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="system_print_inline">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="system_print_end">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
        <value name="END">
          <shadow type="text">
            <field name="TEXT">,</field>
          </shadow>
        </value>
      </block>
      <block type="system_print_many">
        <mutation items="2"></mutation>
        <value name="ADD0">
          <block type="text">
            <field name="TEXT">Hello</field>
          </block>
        </value>
        <value name="ADD1">
          <block type="text">
            <field name="TEXT">Mixly</field>
          </block>
        </value>
      </block>
      <block type="system_input">
        <value name="VAR">
          <shadow type="text">
            <field name="TEXT">prompt</field>
          </shadow>
        </value>
      </block>
      <block type="serial_softserial">
        <value name="TX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO9</field>
          </shadow>
        </value>
        <value name="RX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO10</field>
          </shadow>
        </value>
      </block>
      <block type="serial_print">
        <value name="CONTENT">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="serial_println">
        <value name="CONTENT">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="serial_print_hex">
        <value name="CONTENT">
          <shadow type="math_number">
            <field name="NUM">0XFF00FF</field>
          </shadow>
        </value>
      </block>
	  
      <block type="serial_send_to_ai">
        <value name="CONTENT">
          <shadow type="variables_get">
            <field name="VAR">code</field>
          </shadow>
        </value>
      </block>
	  
      <block type="serial_read_from_ai"></block>
      <block type="serial_any"></block>
      <block type="serial_readstr"></block>
      <block type="serial_readline"></block>
    </category>
    <category id="catOnBoardSensor" colour="40">
      <block type="sensor_mixgoce_button_is_pressed">
        <value name="btn">
          <shadow type="pins_button">
          </shadow>
        </value>
      </block>
      <block type="sensor_mixgoce_button_was_pressed">
        <value name="btn">
          <shadow type="pins_button">
          </shadow>
        </value>
      </block>
      <block type="sensor_mixgoce_button_get_presses">
        <value name="btn">
          <shadow type="pins_button">
          </shadow>
        </value>
        <value name="VAR">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="sensor_mixgoce_pin_pressed">
        <value name="button">
          <shadow type="number1">
          </shadow>
        </value>
      </block>
      <block type="sensor_mixgoce_pin_near"></block>
      <!--       
      <block type="sensor_mixgoce_pin_near_more">
        <value name="freq">
          <shadow type="math_number">
            <field name="NUM">53000</field>
          </shadow>
        </value>
        <value name="dc">
          <shadow type="math_number">
            <field name="NUM">100</field>
          </shadow>
        </value>
      </block> 
      -->
      <block type="sensor_mixgoce_light"></block>
      <block type="sensor_mixgoce_sound"></block>
      <block type="sensor_mixgoce_temperature"></block>
      <block type="sensor_MSA301_get_acceleration"></block>
      <block type="RTC_set_datetime">
        <value name="year">
          <shadow type="math_number">
            <field name="NUM">2020</field>
          </shadow>
        </value>
        <value name="month">
          <shadow type="math_number">
            <field name="NUM">12</field>
          </shadow>
        </value>
        <value name="day">
          <shadow type="math_number">
            <field name="NUM">26</field>
          </shadow>
        </value>
        <value name="hour">
          <shadow type="math_number">
            <field name="NUM">14</field>
          </shadow>
        </value>
        <value name="minute">
          <shadow type="math_number">
            <field name="NUM">20</field>
          </shadow>
        </value>
        <value name="second">
          <shadow type="math_number">
            <field name="NUM">45</field>
          </shadow>
        </value>
        <value name="weekday">
          <shadow type="math_number">
            <field name="NUM">6</field>
          </shadow>
        </value>
        <value name="yearday">
          <shadow type="math_number">
            <field name="NUM">361</field>
          </shadow>
        </value>
        <value name="isdist">
          <shadow type="math_number">
            <field name="NUM">-1</field>
          </shadow>
        </value>
      </block>
      <block type="RTC_get_time">
        <value name="SUB">
          <shadow type="variables_get">
            <field name="VAR">rtc</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catOnBoardActuator" colour="100">
      <block type="actuator_led_bright">
        <value name="led">
          <shadow type="number">
          </shadow>
        </value>
        <value name="bright">
          <shadow type="ledswitch">
          </shadow>
        </value>
      </block>
      <block type="actuator_get_led_bright">
        <value name="led">
          <shadow type="number">
          </shadow>
        </value>
      </block>
      <block type="actuator_led_brightness">
        <value name="led">
          <shadow type="number">
          </shadow>
        </value>
        <value name="bright">
          <shadow type="math_number">
            <field name="NUM">65535</field>
          </shadow>
        </value>
      </block>
      <block type="esp32_s2_onboard_music_pitch">
        <value name="pitch">
          <shadow type="pins_tone_notes">
            <field name="PIN">440</field>
          </shadow>
        </value>
      </block>
      <block type="esp32_s2_onboard_music_pitch_with_time">
        <value name="pitch">
          <shadow type="pins_tone_notes">
            <field name="PIN">440</field>
          </shadow>
        </value>
        <value name="time">
          <shadow type="math_number">
            <field name="NUM">1000</field>
          </shadow>
        </value>
      </block>
      <block type="esp32_s2_onboard_music_stop">
        <value name="PIN">
          <shadow type="pins_pwm_pin">
            <field name="PIN">0</field>
          </shadow>
        </value>
      </block>
      <block type="esp32_s2_onboard_music_play_list">
        <value name="LIST">
          <shadow type="pins_playlist"></shadow>
        </value>
        <value name="PIN">
          <shadow type="pins_pwm_pin">
            <field name="PIN">0</field>
          </shadow>
        </value>
      </block>
      <!--       
      <block type="esp32_mixgo_music_play_list_show">
        <value name="LIST">
          <shadow type="pins_playlist"></shadow>
        </value>
        <value name="PIN">
          <shadow type="pins_pwm_pin">
            <field name="PIN">27</field>
          </shadow>
        </value>
      </block> 
      -->
      <block type="esp32_s2_music_set_tempo">
        <value name="TICKS">
          <shadow type="math_number">
            <field name="NUM">4</field>
          </shadow>
        </value>
        <value name="BPM">
          <shadow type="math_number">
            <field name="NUM">120</field>
          </shadow>
        </value>
      </block>
      <block type="esp32_s2_music_get_tempo"></block>
      <block type="esp32_s2_music_reset"></block>
      <block type="actuator_onboard_neopixel_rgb_change_mod"></block>
      <block type="actuator_onboard_neopixel_rgb_show_all">
        <value name="RVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="GVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="BVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="actuator_onboard_neopixel_rgb_show_one">
        <value name="_LED_">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="RVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="GVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="BVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="actuator_onboard_neopixel_rgb_show_all_chase">
        <value name="RVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="GVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="BVALUE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="time">
          <shadow type="math_number">
            <field name="NUM">1000</field>
          </shadow>
        </value>
      </block>
      <block type="actuator_onboard_neopixel_rgb_show_all_rainbow">
        <value name="time">
          <shadow type="math_number">
            <field name="NUM">1000</field>
          </shadow>
        </value>
      </block>
      <block type="actuator_onboard_neopixel_write">
      </block>
    </category>
    <category id="catOnBoardDisplay" colour="180">
      <block type="display_show_image_or_string">
        <value name="data">
          <shadow type="pins_builtinimg"></shadow>
        </value>
      </block>
      <block type="display_scroll_string">
        <value name="data">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
      </block>
      <block type="display_show_static">
        <value name="data">
          <shadow type="text">
            <field name="TEXT">abc</field>
          </shadow>
        </value>
      </block>
      <block type="display_show_image_or_string_delay">
        <value name="data">
          <shadow type="pins_builtinimg"></shadow>
        </value>
        <value name="time">
          <shadow type="math_number">
            <field name="NUM">120</field>
          </shadow>
        </value>
      </block>
      <block type="display_scroll_string_delay">
        <value name="data">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
        <value name="time">
          <shadow type="math_number">
            <field name="NUM">120</field>
          </shadow>
        </value>
      </block>
      <block type="display_image_create"></block>
      <block type="display_image_builtins"></block>
      <!--       
      <block type="display_animate"></block>
      <block type="image_arithmetic">
        <value name="A">
          <shadow type="pins_builtinimg"></shadow>
        </value>>
        <value name="B">
          <shadow type="pins_builtinimg"></shadow>
        </value>
      </block> 
      -->
      <block type="display_shift">
        <value name="val">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="display_get_pixel">
        <value name="x">
          <shadow type="pins_exlcdh"></shadow>
        </value>
        <value name="y">
          <shadow type="pins_exlcdv"></shadow>
        </value>
      </block>
      <block type="display_bright_point">
        <value name="x">
          <shadow type="pins_exlcdh"></shadow>
        </value>
        <value name="y">
          <shadow type="pins_exlcdv"></shadow>
        </value>
        <value name="STAT">
          <shadow type="display_onoff">
          </shadow>
        </value>
      </block>
      <block type="display_bright_screen">
        <value name="x">
          <shadow type="pins_exlcdh"></shadow>
        </value>
      </block>
      <block type="display_get_screen_pixel"></block>
      <block type="display_clear"></block>
    </category>
    <category id="catExtend">
      <category id="catSensor" colour="40">
        <!--         
        <block type="sensor_mixgoce_extern_button_is_pressed">
          <value name="PIN">
            <shadow type="pins_digital_pin">
              <field name="PIN">0</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_mixgoce_extern_button_was_pressed">
          <value name="PIN">
            <shadow type="pins_digital_pin">
              <field name="PIN">0</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_mixgoce_extern_button_get_presses">
          <value name="PIN">
            <shadow type="pins_digital_pin">
              <field name="PIN">0</field>
            </shadow>
          </value>
          <value name="VAR">
            <shadow type="math_number">
              <field name="NUM">1</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_mixgoce_extern_dimmer">
          <value name="PIN">
            <shadow type="pins_analog_pin"></shadow>
          </value>
        </block>
        <block type="sensor_mixgoce_extern_pin_near">
          <value name="PINA">
            <shadow type="pins_analog_pin"></shadow>
          </value>
          <value name="PINB">
            <shadow type="pins_analog_pin"></shadow>
          </value>
        </block> 
        -->
      <block type="communicate_i2c_init">
        <value name="SUB">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
        <value name="TX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO1</field>
          </shadow>
        </value>
        <value name="RX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO2</field>
          </shadow>
        </value>
        <value name="freq">
          <shadow type="math_number">
            <field name="NUM">100000</field>
          </shadow>
        </value>
        <next>
          <block type="sensor_use_i2c_init">
            <value name="SUB">
              <shadow type="variables_get">
                <field name="VAR">xsensor</field>
              </shadow>
            </value>
            <value name="I2CSUB">
              <shadow type="variables_get">
                <field name="VAR">i2c_extend</field>
              </shadow>
            </value>
          </block>
        </next>
        </block>
        <block type="sensor_LTR308">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">xsensor</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_hp203">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">xsensor</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_shtc3">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">xsensor</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_aht11">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">xsensor</field>
            </shadow>
          </value>
        </block>
        <block type="sensor_VL530LX">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">xsensor</field>
            </shadow>
          </value>
        </block>
        <block type="communicate_spi_init">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">spi</field>
            </shadow>
          </value>
          <value name="sck">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO5</field>
            </shadow>
          </value>
          <value name="mosi">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO6</field>
            </shadow>
          </value>
          <value name="miso">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO7</field>
            </shadow>
          </value>
          <next>
            <block type="rfid_use_spi_init">
              <value name="SPISUB">
                <shadow type="variables_get">
                  <field name="VAR">spi</field>
                </shadow>
              </value>
              <value name="PINSUB">
                <shadow type="pins_digital_pin">
                  <field name="PIN">IO35</field>
                </shadow>
              </value>
              <value name="SUB">
                <shadow type="variables_get">
                  <field name="VAR">rfid</field>
                </shadow>
              </value>
            </block>
          </next>
        </block>
        <block type="rfid_readid">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">rfid</field>
            </shadow>
          </value>
        </block>
        <block type="rfid_readcontent">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">rfid</field>
            </shadow>
          </value>
          <value name="SECTOR">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block>
        <block type="rfid_write">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">rfid</field>
            </shadow>
          </value>
          <value name="SECTOR">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
          <value name="CONTENT">
            <shadow type="text">
              <field name="TEXT">Mixly</field>
            </shadow>
          </value>
        </block>
        <!--         
        <block type="rfid_status">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">rfid</field>
            </shadow>
          </value>
        </block> 
        -->
        <block type="sensor_mixgoce_hot_wheel_is_touched"></block>
        <block type="sensor_mixgoce_hot_wheel_degrees"></block>
        <block type="HCSR04">
          <value name="PIN1">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO11</field>
            </shadow>
          </value>
          <value name="PIN2">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO12</field>
            </shadow>
          </value>
        </block>
        <block type="esp32_s2_weather_init">
          <value name="wd">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO9</field>
            </shadow>
          </value>
          <value name="ws">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO10</field>
            </shadow>
          </value>
          <value name="rain">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO6</field>
            </shadow>
          </value>
        </block>
        <block type="esp32_s2_weather_wd"></block>
        <block type="esp32_s2_weather_ws"></block>
        <block type="esp32_s2_weather_rain">
          <value name="rain">
            <shadow type="math_number">
              <field name="NUM">3600</field>
            </shadow>
          </value>
        </block>
        <block type="PS2_init"></block>
        <block type="PS2_Button"></block>
        <block type="PS2_Buttons"></block>
        <block type="PS2_State"></block>
        <block type="PS2_stk"></block>
      </category>
      <category id="catActuator" colour="100">
        <block type="esp32_s2_audio_init">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">audio</field>
            </shadow>
          </value>
          <value name="sclk">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO5</field>
            </shadow>
          </value>
          <value name="ws">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO6</field>
            </shadow>
          </value>
          <value name="data">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO7</field>
            </shadow>
          </value>
        </block>
        <block type="esp32_s2_audio_wave_play">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">audio</field>
            </shadow>
          </value>
          <value name="wav">
            <shadow type="variables_get">
              <field name="VAR">f</field>
            </shadow>
          </value>
        </block>
        <block type="esp32_s2_audio_wave_is_playing">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">audio</field>
            </shadow>
          </value>
        </block>
        <block type="servo_init">
          <value name="PIN">
            <shadow type="pins_pwm_pin"></shadow>
          </value>
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">myservo</field>
            </shadow>
          </value>
        </block>
        <block type="servo_move">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">myservo</field>
            </shadow>
          </value>
          <value name="DEGREE">
            <shadow type="math_number">
              <field name="NUM">100</field>
            </shadow>
          </value>
        </block>
        <block type="servo_speed_360">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">myservo</field>
            </shadow>
          </value>
          <value name="SPEED">
            <shadow type="math_number">
              <field name="NUM">10</field>
            </shadow>
          </value>
        </block>
        <!--         
        <block type="actuator_extern_led_bright">
          <value name="PIN">
            <shadow type="pins_pwm_pin">
            </shadow>
          </value>
          <value name="bright">
            <shadow type="ledswitch">
            </shadow>
          </value>
        </block>
        <block type="actuator_extern_get_led_bright">
          <value name="PIN">
            <shadow type="pins_pwm_pin">
            </shadow>
          </value>        
        </block>
        <block type="actuator_extern_led_brightness">
          <value name="PIN">
            <shadow type="pins_pwm_pin">
            </shadow>
          </value>
          <value name="bright">
            <shadow type="math_number">
              <field name="NUM">65535</field>
            </shadow>
          </value>
        </block> 
        -->
      </category>
      <category id="catMonitor" colour="180">
        <block type="communicate_i2c_init">
          <value name="SUB">
            <shadow type="variables_get">
              <field name="VAR">i2c_extend</field>
            </shadow>
          </value>
          <value name="TX">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO1</field>
            </shadow>
          </value>
          <value name="RX">
            <shadow type="pins_digital_pin">
              <field name="PIN">IO2</field>
            </shadow>
          </value>
          <value name="freq">
            <shadow type="math_number">
              <field name="NUM">100000</field>
            </shadow>
          </value>
          <next>
            <block type="display_tm_use_i2c_init">
              <value name="SUB">
                <shadow type="variables_get">
                  <field name="VAR">disp</field>
                </shadow>
              </value>
              <value name="I2CSUB">
                <shadow type="variables_get">
                  <field name="VAR">i2c_extend</field>
                </shadow>
              </value>
            </block>
          </next>
        </block>
        <block type="display_tm1650_power">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">disp</field>
            </shadow>
          </value>
        </block>
        <block type="display_tm1650_show_num">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">disp</field>
            </shadow>
          </value>
          <value name="VALUE">
            <shadow type="math_number">
              <field name="NUM">2333</field>
            </shadow>
          </value>
        </block>
        <block type="display_tm1650_show_dot">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">disp</field>
            </shadow>
          </value>
          <value name="NO">
            <shadow type="pins_digital_dot"></shadow>
          </value>
          <value name="STAT">
            <shadow type="display_onoff">
            </shadow>
          </value>
        </block>
        <block type="display_tm1650_set_brightness">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">disp</field>
            </shadow>
          </value>
          <value name="VALUE">
            <shadow type="math_number">
              <field name="NUM">1</field>
            </shadow>
          </value>
        </block>
      </category>
    </category>
    <category id="catFile" colour="0">
      <block type="storage_fileopen">
        <value name="FILENAME">
          <shadow type="text">
            <field name="TEXT">filename.txt</field>
          </shadow>
        </value>
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_file_write">
        <value name="data">
          <shadow type="text">
            <field name="TEXT">Mixly</field>
          </shadow>
        </value>
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_get_contents_without_para">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_get_contents">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
        <value name="SIZE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="inout_digital_init">
        <field name="PIN_OBJ">pin#</field>
        <value name="PIN">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO4</field>
          </shadow>
        </value>
        <next>
          <block type="communicate_spi_init">
            <value name="VAR">
              <shadow type="variables_get">
                <field name="VAR">spi</field>
              </shadow>
            </value>
            <value name="sck">
              <shadow type="pins_digital_pin">
                <field name="PIN">IO5</field>
              </shadow>
            </value>
            <value name="mosi">
              <shadow type="pins_digital_pin">
                <field name="PIN">IO6</field>
              </shadow>
            </value>
            <value name="miso">
              <shadow type="pins_digital_pin">
                <field name="PIN">IO7</field>
              </shadow>
            </value>
            <next>
              <block type="storage_sd_card_init">
                <value name="SPISUB">
                  <shadow type="variables_get">
                    <field name="VAR">spi</field>
                  </shadow>
                </value>
                <value name="PINSUB">
                  <shadow type="variables_get">
                    <field name="VAR">pin4</field>
                  </shadow>
                </value>
                <value name="SUB">
                  <shadow type="variables_get">
                    <field name="VAR">sdcard</field>
                  </shadow>
                </value>
              </block>
            </next>
          </block>
        </next>
      </block>
      <block type="storage_sd_card_mount">
        <value name="SUB">
          <shadow type="variables_get">
            <field name="VAR">sdcard</field>
          </shadow>
        </value>
        <value name="PATH">
          <shadow type="text">
            <field name="TEXT">/sd</field>
          </shadow>
        </value>
      </block>
      <block type="storage_can_write_ornot">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_get_filename">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_close_file">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_file_tell">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
      </block>
      <block type="storage_file_seek">
        <value name="FILE">
          <shadow type="variables_get">
            <field name="VAR">f</field>
          </shadow>
        </value>
        <value name="SIZE">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="storage_list_all_files"> </block>
      <block type="storage_get_current_dir"> </block>
      <block type="storage_change_dir">
        <value name="FILE">
          <shadow type="text">
            <field name="TEXT">path</field>
          </shadow>
        </value>
      </block>
      <block type="storage_make_dir">
        <value name="PATH">
          <shadow type="text">
            <field name="TEXT">path</field>
          </shadow>
        </value>
      </block>
      <block type="storage_delete_file">
        <value name="FILE">
          <shadow type="text">
            <field name="TEXT">filename.txt</field>
          </shadow>
        </value>
      </block>
      <block type="storage_rename">
        <value name="FILE">
          <shadow type="text">
            <field name="TEXT">srcname.txt</field>
          </shadow>
        </value>
        <value name="NEWFILE">
          <shadow type="text">
            <field name="TEXT">dstname.txt</field>
          </shadow>
        </value>
      </block>
      <block type="storage_file_status">
        <value name="FILE">
          <shadow type="text">
            <field name="TEXT">path</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catGroup" colour="140">
      <!-- <block type="communicate_irremote"></block> -->
      <block type="communicate_i2c_onboard"></block>
      <block type="communicate_irremote_receive"></block>
      <block type="communicate_irremote_send">
        <field name="op">ir_send_hex</field>
        <value name="data">
          <shadow type="list_many_input">
            <field name="CONTENT">255,0,0,0</field>
          </shadow>
          <block type="text">
            <field name="TEXT">0XFFFFFF</field>
          </block>
        </value>
      </block>
      <block type="communicate_wireless_socket_init">
        <value name="SUB">
          <shadow type="variables_get">
            <field name="VAR">ws</field>
          </shadow>
        </value>
        <value name="ON">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO11</field>
          </shadow>
        </value>
        <value name="OFF">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO12</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_wireless_socket_on_off">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">ws</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_buffer">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">buf</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="math_number">
            <field name="NUM">50</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_init">
        <value name="SUB">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
        <value name="TX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO1</field>
          </shadow>
        </value>
        <value name="RX">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO2</field>
          </shadow>
        </value>
        <value name="freq">
          <shadow type="math_number">
            <field name="NUM">100000</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_try_lock">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_scan">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_write">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
        <value name="address">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="list_many_input">
            <field name="CONTENT">1,2,3,4,5</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_read">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
        <value name="address">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="length">
          <shadow type="math_number">
            <field name="NUM">5</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="variables_get">
            <field name="VAR">buf</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_writeto_then_readfrom">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
        <value name="address">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
        <value name="write">
          <shadow type="list_many_input">
            <field name="CONTENT">1,2,3,4,5</field>
          </shadow>
        </value>
        <value name="read">
          <shadow type="variables_get">
            <field name="VAR">buf</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_unlock">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_i2c_unlock">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">i2c_extend</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_init">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
        <value name="sck">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO5</field>
          </shadow>
        </value>
        <value name="mosi">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO6</field>
          </shadow>
        </value>
        <value name="miso">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO7</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_configure">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
        <value name="freq">
          <shadow type="math_number">
            <field name="NUM">200000</field>
          </shadow>
        </value>
        <value name="polarity">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
        <value name="phase">
          <shadow type="math_number">
            <field name="NUM">0</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_try_lock">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_write">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="list_many_input">
            <field name="CONTENT">1,2,3,4,5</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_read">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
        <value name="length">
          <shadow type="math_number">
            <field name="NUM">5</field>
          </shadow>
        </value>
        <value name="data">
          <shadow type="variables_get">
            <field name="VAR">buf</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_write_readinto">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
        <value name="write">
          <shadow type="list_many_input">
            <field name="CONTENT">1,2,3,4,5</field>
          </shadow>
        </value>
        <value name="read">
          <shadow type="variables_get">
            <field name="VAR">buf</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_spi_unlock">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">spi</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_ow_init">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">ow</field>
          </shadow>
        </value>
        <value name="BUS">
          <shadow type="pins_digital_pin">
            <field name="PIN">IO12</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_ow_read">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">ow</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_ow_write">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">ow</field>
          </shadow>
        </value>
        <value name="byte">
          <shadow type="math_number">
            <field name="NUM">1</field>
          </shadow>
        </value>
      </block>
      <block type="communicate_ow_reset">
        <value name="VAR">
          <shadow type="variables_get">
            <field name="VAR">ow</field>
          </shadow>
        </value>
      </block>
    </category>
    <category id="catIot">
      <category id="catNetwork" colour="225">
        <block type="radio_init"></block>
        <block type="radio_ons"></block>
        <block type="microbit_radio_config">
          <value name="channel">
            <shadow type="math_number">
              <field name="NUM">76</field>
            </shadow>
          </value>
          <value name="power">
            <shadow type="pins_radio_power">
              <field name="PIN">6</field>
            </shadow>
          </value>
          <value name="address">
            <shadow type="text">
              <field name="TEXT">Node1</field>
            </shadow>
          </value>
          <value name="data_rate">
            <shadow type="pins_radio_datarate"></shadow>
          </value>
        </block>
        <block type="radio_send_string">
          <value name="data">
            <shadow type="text">
              <field name="TEXT">Mixly</field>
            </shadow>
          </value>
        </block>
        <block type="radio_receive_string"></block>
      </category>
      <category id="catMixIO" colour="225">
        <!--         
        <block type="iot_wifi_connect">
          <value name="WIFINAME">
            <shadow type="text">
              <field name="TEXT">wifiname</field>
            </shadow>
          </value>
          <value name="PASSWORD">
            <shadow type="text">
              <field name="TEXT">wifipassword</field>
            </shadow>
          </value>
        </block> 
        -->
        <block type="WIFI_RADIO_CONNECT">
          <value name="USERNAME">
            <shadow type="text">
              <field name="TEXT">ssid</field>
            </shadow>
          </value>
          <value name="PASSWORD">
            <shadow type="text">
              <field name="TEXT">password</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE"></block>
        <block type="IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE"></block>
        <block type="IOT_EMQX_INIT_AND_CONNECT">
          <value name="SERVER">
            <shadow type="text">
              <field name="TEXT">mixio.mixly.org</field>
            </shadow>
          </value>
          <value name="PORT">
            <shadow type="math_number">
              <field name="NUM">1883</field>
            </shadow>
          </value>
          <value name="USERNAME">
            <shadow type="text">
              <field name="TEXT">username</field>
            </shadow>
          </value>
          <value name="PASSWORD">
            <shadow type="text">
              <field name="TEXT">password</field>
            </shadow>
          </value>
          <value name="PROJECT">
            <shadow type="text">
              <field name="TEXT">project</field>
            </shadow>
          </value>
        </block>
        <!--         
        <block type="IOT_EMQX_INIT">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
          <value name="SERVER">
            <shadow type="text">
              <field name="TEXT">mixio.mixly.org</field>
            </shadow>
          </value>
          <value name="PORT">
            <shadow type="math_number">
              <field name="NUM">1883</field>
            </shadow>
          </value>
          <value name="USERNAME">
            <shadow type="text">
              <field name="TEXT">username</field>
            </shadow>
          </value>
          <value name="PASSWORD">
            <shadow type="text">
              <field name="TEXT">password</field>
            </shadow>
          </value>
          <value name="PROJECT">
            <shadow type="text">
              <field name="TEXT">project</field>
            </shadow>
          </value>
          <value name="IS_SSL">
            <shadow type="logic_boolean"></shadow>
          </value>
          <value name="SOCKET_POOL">
             <shadow type="logic_null"></shadow> 
            <shadow type="CREATE_SOCKETPOOL"></shadow>
          </value>
          <value name="SSL_CONTEXT">
            <shadow type="logic_null"></shadow> 
            <shadow type="CREATE_DEFAULT_CONTEXT"></shadow>
          </value>
        </block> 
        -->
        <!--         
        <block type="IOT_EMQX_PUBLISH">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="MSG">
            <shadow type="text">
              <field name="TEXT">msg</field>
            </shadow>
          </value>
        </block> 
        -->
        <!--         
        <block type="IOT_EMQX_SUBSCRIBE">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_SUBSCRIBE_MORE">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="QOS">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block> 
        -->
        <block type="IOT_EMQX_PUBLISH_LIGHT">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="MSG">
            <shadow type="text">
              <field name="TEXT">msg</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_SUBSCRIBE_AND_ADD_TOPIC_CALLBACK_LIGHT">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="METHOD">
            <shadow type="factory_block_return">
              <field name="VALUE">method</field>
            </shadow>
          </value>
        </block>
        <block type="procedures_defnoreturn">
          <mutation>
            <arg name="client"></arg>
            <arg name="topic"></arg>
            <arg name="msg"></arg>
          </mutation>
          <field name="NAME">method</field>
        </block>
        <block type="IOT_EMQX_LOOP">
          <value name="TIMEOUT">
            <shadow type="math_number">
              <field name="NUM">1</field>
            </shadow>
          </value>
        </block>
        <!--         
        <block type="IOT_EMQX_CONNECT">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
        </block> 
        -->

        <block type="IOT_FORMATTING">
          <value name="VAR">
            <block type="dicts_create_with_noreturn" inline="true">
              <field name="VAR">content</field>
              <mutation items="3"></mutation>
              <field name="KEY0">'long'</field>
              <field name="KEY1">'lat'</field>
              <field name="KEY2">'message'</field>
              <value name="ADD0">
                <block type="math_number">
                  <field name="NUM">0</field>
                </block>
              </value>
              <value name="ADD1">
                <block type="math_number">
                  <field name="NUM">1</field>
                </block>
              </value>
              <value name="ADD2">
                <block type="math_number">
                  <field name="NUM">2</field>
                </block>
              </value>
            </block>
          </value>
        </block>
        <block type="IOT_FORMAT_STRING">
          <value name="VAR">
            <block type="dicts_create_with_noreturn" inline="true">
              <field name="VAR">content</field>
              <mutation items="3"></mutation>
              <field name="KEY0">'key1'</field>
              <field name="KEY1">'key2'</field>
              <field name="KEY2">'key3'</field>
              <value name="ADD0">
                <block type="math_number">
                  <field name="NUM">0</field>
                </block>
              </value>
              <value name="ADD1">
                <block type="math_number">
                  <field name="NUM">1</field>
                </block>
              </value>
              <value name="ADD2">
                <block type="math_number">
                  <field name="NUM">2</field>
                </block>
              </value>
            </block>
          </value>
        </block>
        <!-- <block type="WIFI_RESET"></block> -->
        <block type="IOT_EMQX_RECONNECT"></block>
        <block type="IOT_EMQX_DISCONNECT"></block>
        <block type="IOT_EMQX_DEINIT"></block>
        <block type="IOT_EMQX_IS_CONNECT"></block>
        <block type="IOT_EMQX_PING"></block>
        <block type="IOT_EMQX_ENABLE_LOGGER">
          <value name="LEVEL">
            <shadow type="math_number">
              <field name="NUM">20</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_UNSUBSCRIBE">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
        </block>
        <!--
        <block type="IOT_EMQX_DISABLE_LOGGER">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
        </block>
        -->
        <!--         
        <block type="IOT_EMQX_ADD_TOPIC_CALLBACK">
          <value name="VAR">
            <shadow type="variables_get">
              <field name="VAR">mqtt_client</field>
            </shadow>
          </value>
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="METHOD">
            <shadow type="factory_block_return">
              <field name="VALUE">method</field>
            </shadow>
          </value>
        </block> 
        -->
        <block type="IOT_EMQX_REMOVE_TOPIC_CALLBACK">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="METHOD">
            <shadow type="factory_block_return">
              <field name="VALUE">method</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_USERNAME_PW_SET">
          <value name="USERNAME">
            <shadow type="text">
              <field name="TEXT">username</field>
            </shadow>
          </value>
          <value name="PASSWORD">
            <shadow type="text">
              <field name="TEXT">password</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_PUBLISH_MORE">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="MSG">
            <shadow type="text">
              <field name="TEXT">msg</field>
            </shadow>
          </value>
          <value name="RETAIN">
            <shadow type="logic_boolean">
              <field name="BOOL">FALSE</field>
            </shadow>
          </value>
          <value name="QOS">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block>
        <block type="IOT_EMQX_SUBSCRIBE_AND_ADD_TOPIC_CALLBACK">
          <value name="TOPIC">
            <shadow type="text">
              <field name="TEXT">topic</field>
            </shadow>
          </value>
          <value name="METHOD">
            <shadow type="factory_block_return">
              <field name="VALUE">method</field>
            </shadow>
          </value>
        </block>
      </category>
      <category name="Blynk IoT" colour="#24c48e">
        <block type="mpython_blynk_setup">
          <value name="server">
            <shadow type="text">
              <field name="TEXT">blynk.mixly.org</field>
            </shadow>
          </value>
          <value name="port">
            <shadow type="math_number">
              <field name="NUM">8080</field>
            </shadow>
          </value>
          <value name="auth">
            <shadow type="text">
              <field name="TEXT">AUTH TOKEN</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_app_data">
          <value name="virtual_pin">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
          <value name="virtual_pin_val">
            <block type="variables_get">
              <field name="VAR">_value</field>
            </block>
          </value>
          <statement name="DO">
          </statement>
        </block>
        <block type="mpython_blynktimer">
          <value name="Num">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
          <value name="period">
            <shadow type="math_number">
              <field name="NUM">2</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_get_timers"></block>
        <block type="mpython_blynk_stop_timers">
          <value name="timer_num">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_run"></block>
        <block type="mpython_blynktimer_run"></block>
        <block type="mpython_blynk_sensor_data_to_app">
          <value name="sensor_data">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
          <value name="virtual_pin">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_app_notify">
          <value name="notification">
            <shadow type="text">
              <field name="TEXT">notify</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_on_connected">
        </block>
        <block type="mpython_blynk_on_disconnected">
        </block>
        <block type="mpython_blynk_sync_virtual">
          <value name="virtual_pin">
            <shadow type="math_number">
              <field name="NUM">0</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_email">
          <value name="TargetEmail">
            <shadow type="text">
              <field name="TEXT">Your Target Email</field>
            </shadow>
          </value>
          <value name="subject">
            <shadow type="text">
              <field name="TEXT">subject</field>
            </shadow>
          </value>
          <value name="body">
            <shadow type="text">
              <field name="TEXT">body</field>
            </shadow>
          </value>
        </block>
        <block type="mpython_blynk_set_property">
          <value name="attribute_name">
            <shadow type="text">
              <field name="TEXT">color</field>
            </shadow>
          </value>
          <value name="attribute_value">
            <shadow type="text">
              <field name="TEXT">#FF0000</field>
            </shadow>
          </value>
        </block>
      </category>
    </category>
    <category id="catFactory" name="Factory" colour="#777777">
      <block type="folding_block"></block>
      <block type="factory_import"></block>
      <block type="factory_from_import"></block>
      <block type="factory_function_noreturn"></block>
      <block type="factory_function_return"></block>
      <block type="factory_declare"></block>
      <block type="factory_callMethod_noreturn"></block>
      <block type="factory_callMethod_return"></block>
      <block type="factory_block"></block>
      <block type="factory_block_return"></block>
      <block type="factory_block_with_textarea"></block>
      <block type="factory_block_return_with_textarea"></block>
    </category>
  </xml>
  <script>
    if (company_block != null) {
      $('#toolbox').append(company_block);
    }
    if (myblock != null) {
      $('#toolbox').append(myblock);
    }
  </script>
  <script type="text/javascript" src="../common/library-init.js"></script>
</body>

</html>